#ifndef PROJECTFILECONFIG_H
#define PROJECTFILECONFIG_H

#include <QObject>
#include <QWidget>
#include <QtXml>
#include <QMessageBox>
#include <QCryptographicHash>

#include "project_startup/prostartup_newpro.h"
#include "head_button/dialog_new_module.h"

#include "module/modulefileconfig.h"

struct Project_Config
{
    Project_Path proPath;

    QDomDocument proDoc;

    QDomElement proRoot;
    QDomElement proModuleTable;
    QDomElement proPortConnexion;
    QDomElement proLog;

    void setProPath(Project_Path path)
    {
        proPath.proName = path.proName;
        proPath.proFilePath = path.proFilePath;
    }

    QString getProName()
    { return proPath.proName; }

    QString getProFilePath()
    { return proPath.proFilePath; }

    QString getProPath()
    { return proPath.getPath(); }
};


class projectFileConfig : public QWidget
{
    Q_OBJECT
public:
    QMap<QString, moduleFileConfig *> module_list; // ID + moduleFileConfig

    explicit projectFileConfig(QWidget *parent = nullptr);
    explicit projectFileConfig(Project_Path path, QWidget *parent = nullptr);

    bool load_proConfig(Project_Path);  // 加载工程文件配置
    void save_proConfig();  // 保存工程文件配置

    QDomNodeList get_module_tables();

    static QString makeMD5(QString content);
    static QString makeID();  // 通过MD5(QRandomGenerator随机数 + 当前系统时间)计算所得ID

    Module_Data toModuleDataForID(QString ID); // 通过 ID 返回 moduleFileConfig 的 Module Data

    bool checkModule(QString module_name);

    QString get_proName();
    QString get_proPath();

public slots:
    void recv_newModule(Module_Data);

signals:
    void add_module(Module_Data, QDomElement);

private:
    Project_Config proConfig;

    bool isMasterModuleExist =  false;

    void init_module_list();

signals:
    void send_newModule(QString, Module_Data);
};

#endif // PROJECTFILECONFIG_H
